package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	/*
		读取数据：
			Reader接口：
				Read(p []byte)(n int, err error)
					Read读取到的数据存放在 p 中，n 表示读取到的字节数（0 ~ len(p)）
	*/
	//读取本地文件 狼堡.txt 文件中的数据
	//step1：打开文件
	fileName := "E:/代码文件/灰太狼/狼堡.txt"
	file, err := os.Open(fileName)
	if err != nil {
		fmt.Println("errr:", err)
		return
	}

	//step3：关闭文件
	defer file.Close()

	//step2：读取数据
	bs := make([]byte, 6, 6)
	/*
		//第一次读取
		n, err := file.Read(bs) //切片的数据类型为 byte，所以是以 byte 的数据类型来从文件中读取数据的
		fmt.Println(err)        //<nil>
		fmt.Println(n)          //6
		fmt.Println(bs)         //[230 136 145 231 136 177]
		fmt.Println(string(bs)) //我爱

		//第二次读取
		n, err = file.Read(bs)
		fmt.Println(err)        //<nil>
		fmt.Println(n)          //6
		fmt.Println(bs)         //[231 129 176 229 164 170]
		fmt.Println(string(bs)) //灰太

		//第三次读取
		n, err = file.Read(bs)
		fmt.Println(err)
		fmt.Println(n)
		fmt.Println(bs)         //[231 139 188 33 164 170]
		fmt.Println(string(bs)) //狼!��（ps: 这个是英文"!"）

		n, err = file.Read(bs)
		fmt.Println(err) //EOF
		fmt.Println(n)   //0
	*/
	n := -1
	for {
		n, err = file.Read(bs)
		if n == 0 || err == io.EOF {
			fmt.Println("读取到了文件的末尾，结束读取操作。。")
			break
		}
		fmt.Println(string(bs[:n]))
	}
}
